<?php
/**
 * Logging
 * 
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2010 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 * 
 * */


Class Yapary_Exception_Log
{
	const E_ERROR = -1;		// Allgemeine Fehler
	const E_WARNING = -2;	// Warnung vor funktionierenden, jedoch ungewollten Dingen
	const E_NOTICE = -4;	// Fuer allgemeine Bemerkungen
	const E_INFO = -8;		// Fuer hilfreiche Informationsausgaben
	const E_DEBUG = -16;	// fuer Debug-Ausgaben
	
	private $arrData = array();
	private $enableLog = false;
	private $enableNotice = false;

	private $noticeMailAddress = NULL;
	private $noticeLogName = NULL;	

	function __construct ( $_enableLogging = false  )
	{
		if (is_bool($_enableLogging)) {
			$this->enableLog = $_enableLogging;		
		}
	}

	function __destruct ( )
	{
		if (count($this->arrData) >= 1) {
			if ($this->enableLog) {
				echo $msg = $this->printLog();
			}
			if ($this->enableNotice) {
				$this->noticeByMail($this->noticeMailAddress, $this->noticeLogName, $msg);
			}
		}
	}
	

	/**
	* Aktiviert das Logging
	* @param bool $_enable : aktivieren/deaktivieren
	* @return bool|NULL : Liefert bei Erfolg den gesetzten Wert zurueck. Ansonsten NULL
	*/
	public function logOn ( $_enable = true )
	{
		if (is_bool($_enable)) {
			return $this->enableLog = (bool) $_enable;
		}

		return NULL;				
	}


	/**
	* Aktiviert den eMail-Versandt bei einem Fehler
	* @param string|NULL $_receiver : eMail-Adresse, welche Informiert werden soll
	* @param string|NULL $_logName : Bezeichnung des Logs
	* @param bool $_enable : aktivieren/deaktivieren
	* @return bool|NULL : Liefert bei Erfolg den gesetzten Wert zurueck. Ansonsten NULL
	*/
	public function logOnByMail ( $_receiver, $_logName, $_enable = true )
	{
		if (is_bool($_enable)) {
			return $this->enableNotice = (bool) $_enable;
		}

		return NULL;
	}

	
	/**
	* Sendet eine eMail mit den entspr. Fehlern
	* @param string|NULL $_receiver : eMail-Adresse, welche Informiert werden soll
	* @param string|NULL $_logName : Bezeichnung des Logs
	* @return void
	*/
	private function noticeByMail ( $_receiver, $_logName, $_message )
	{
		//=====Email Header erstellen=====
		$receiver = "$_receiver<$_receiver>"; //Empfaenger
		$subject = $_logName; //Email-Titel
		
		$header = NULL;
		$header .= "From: $receiver\n";
		$header .= "Reply-To: $receiver\n";
		$header .= "X-Mailer: PHP/". phpversion() ."\n";
		$header .= "X-Sender-IP: ".getenv("REMOTE_ADDR")."\n";
		$header .= "Content-type: text/html\n";
		
		@mail($receiver, $subject, $_logName.'<br /><br />'.$_message, $header);
	}

	
	/**
	* Meldet einen neuen Fehler
	* @param string $_message : Fehlermeldung
	* @param int $_errCode : aktivieren/deaktivieren
	* @return void
	*/	
	public function addLog ( $_message, $_errCode = NULL, $_logError = self::E_ERROR )
	{
		if ($this->enableLog) {
			$e = new Exception((string) $_message, $_errCode);
			$this->arrData[$_logError][] = $e;
		}
	}


	/**
	* Gibt alle Meldungen aus
	* @return NULL|string
	*/	
	public function printLog ( $_logError = self::E_ERROR )
	{
		$result = NULL;
		
		if (count($this->arrData[$_logError]) >= 1) {
			while (list(,$exception) = each($this->arrData[$_logError])) {
				$result.= '<li>'.$exception->getTraceAsString().'</li>';
			}
			return (string) '<ul>'.$result.'</ul>';
		}
		
		return NULL;
	}


	/**
	* Liefert das Array mit allen Log
	* @return array : Vom Typ Exception. Zugriff per $array[0]->getTraceAsString() ...
	*/
	public function getLogs ( $_logError = self::E_ERROR )
	{
		return $this->arrData[$_logError];
	}
	
}

?>